// 用户登录API
import { NextRequest, NextResponse } from 'next/server';
import { UserDB } from '@/lib/mysql';
import {
  verifyPassword,
  generateToken,
  ApiResponse,
} from '@/lib/auth';

const JWT_EXPIRES_IN = parseInt(process.env.JWT_EXPIRES_IN || '86400');

export async function POST(request: NextRequest) {
  try {
    // 解析请求体
    const body = await request.json();
    const { username, password } = body;

    // 验证必填字段
    if (!username || !password) {
      return ApiResponse.error('用户名和密码不能为空');
    }

    // 查找用户
    const user = await UserDB.findByUsername(username);
    if (!user) {
      return ApiResponse.error('用户名或密码错误');
    }

    // 验证密码
    const isPasswordValid = await verifyPassword(password, user.password_hash);
    if (!isPasswordValid) {
      return ApiResponse.error('用户名或密码错误');
    }

    // 更新最后登录时间
    await UserDB.updateLastLogin(user.id);

    // 生成Token
    const token = generateToken(user);

    // 创建响应
    const response = NextResponse.json(
      {
        success: true,
        message: '登录成功',
        data: {
          user: {
            id: user.id,
            username: user.username,
            email: user.email,
            displayName: user.display_name,
            avatarUrl: user.avatar_url,
            role: user.role,
            lastLoginAt: user.last_login_at,
          },
          token,
        },
      },
      { status: 200 }
    );

    // 设置Cookie（统一使用token作为cookie名称）
    response.cookies.set('token', token, {
      httpOnly: true,
      secure: process.env.NODE_ENV === 'production',
      sameSite: 'lax',
      maxAge: JWT_EXPIRES_IN,
      path: '/',
    });

    return response;
  } catch (error) {
    console.error('登录错误:', error);
    return ApiResponse.serverError('登录失败，请稍后重试');
  }
}

// 不允许其他HTTP方法
export async function GET() {
  return ApiResponse.error('方法不允许', 405);
}

export async function PUT() {
  return ApiResponse.error('方法不允许', 405);
}

export async function DELETE() {
  return ApiResponse.error('方法不允许', 405);
}
